Lossless compression techniques may compress data segments of configurable sizes to smaller sizes. For example, a lossless compression algorithm may utilize different compression ratios (e.g., 4:1, 4:2, 4:3, 4:4) to compress 256-Byte data segments into compressed data segments of various sizes (e.g., 64 Bytes, 128 Bytes, 192 Bytes, 256 Bytes). Conventional techniques may process a data segment (or data block) to reduce the data segment to a fraction of its original size, helping to reduce the amount of bandwidth and resources consumed during data reads/writes between memory units.
Such compressed data may be stored in cache lines of a cache (e.g., an L3 cache). Typically, compressed forms of data segments (or compressed data segments) are stored within cache lines corresponding to the physical addresses of the uncompressed forms of the data segments (or source data segments). Each cache line may have a set size (e.g., 128 Bytes) or capacity that must be filled with any load operation, regardless of the size of the required data. For example, when loading a 64-Byte or 192-Byte segment into 128-Byte (B) cache lines, a computing device may be required to read and store in the cache line an additional, potentially unneeded 64 Bytes to completely fill the 128 Bytes of the cache line(s). Therefore, when compressed data to be loaded into a cache line (or multiple cache lines) is not the same size as source data segments (or the cache lines), there may be “holes” in the physical address space that do not contain useful data. This undesirable loading of unneeded, unusable data is referred to as “overfetching” and may cause suboptimal resource and bandwidth usage between memory units (e.g., Double Data Rate (DDR) random access memory (RAM), etc.) and caches. For example, holes can use up partial cache lines, both increasing requested memory bandwidth and wasting space in the cache that causes unevenness in resource use in computing devices. As compression schemes (e.g., Burrows-Wheeler transforms, etc.) may result in many compressed data segments that are smaller than cache lines, significant overfetching may occur, causing great inefficiency and increased workload that may diminish the benefits of using compression techniques. Further, compressed block sizes may be less than optimal DDR minimum access length (MAL), causing worse performance.